#ifndef OPERATOR_H
#define OPERATOR_H

#include "global.h"



static OPERATOR_MAP g_operator_map;
static FUNC_LIST g_function_map;

void initOperator();

OPERA_FUNC findOperator(const string& name);
FUNCTION* findFunction(const string& name);
string evalFunction(const FUNCTION* func, const PARAMETERS& args);

// +
string o_plus(const PARAMETERS& args); 
// -
string o_minus(const PARAMETERS& args);
// *
string o_multiplies(const PARAMETERS& args);
// /
string o_divides(const PARAMETERS& args);
// mod
string o_mod(const PARAMETERS& args);
// car
string o_car(const PARAMETERS& args);
// cdr
string o_cdr(const PARAMETERS& args);
// eq
string o_eq(const PARAMETERS& args);
// atom
string o_atom(const PARAMETERS& args);
//*quote (')
string o_quote(const PARAMETERS& args);
//*cond
string o_cond(const PARAMETERS& args);
// cons
string o_cons(const PARAMETERS& args);
//*defun
string o_defun(const PARAMETERS& args);
// setq
string o_setq(const PARAMETERS& args);
// and
string o_and(const PARAMETERS& args);
// or
string o_or(const PARAMETERS& args);
// eval
string o_eval(const PARAMETERS& args);
// write
string o_write(const PARAMETERS& args);
// >
string o_greater_than(const PARAMETERS& args);
// <
string o_less_than(const PARAMETERS& args);
// >=
string o_greater_than_or_equal(const PARAMETERS& args);
// <=
string o_less_than_or_equal(const PARAMETERS& args);



#endif // OPERATOR_H 